
using System;
using System.Text;

namespace Org.BouncyCastle.Crypto
{
	public interface ISigner
	{
		/**
		 * Return the name of the algorithm the signer implements.
		 *
		 * @return the name of the algorithm the signer implements.
		 */
		string AlgorithmName { get; }

		/**
		 * Initialise the signer for signing or verification.
		 *
		 * @param forSigning true if for signing, false otherwise
		 * @param param necessary parameters.
		 */
		 void Init(bool forSigning, ICipherParameters parameters);

		/**
		 * update the internal digest with the byte b
		 */
		void Update(byte input);

		/**
		 * update the internal digest with the byte array in
		 */
		void BlockUpdate(byte[] input, int inOff, int length);

		/**
		 * Generate a signature for the message we've been loaded with using
		 * the key we were initialised with.
		 */
		byte[] GenerateSignature();
		/**
		 * return true if the internal state represents the signature described
		 * in the passed in array.
		 */
		bool VerifySignature(byte[] signature);

		/**
		 * reset the internal state
		 */
		void Reset();
	}
}
